package xyz.lwm.lazycat.web.route;

import xyz.lwm.lazycat.web.handle.Handler;

/**
 * web router
 *
 * @author lwm
 */
public interface Router {

    /**
     * 添加路由, 自由度高, 可以自行对请求进行处理, 包括拦截, 转发, 缓存, 日志, 错误处理等等
     *
     * @param route 通用路由
     */
    void add(Route route);

    /**
     * 反向代理 (转发请求)
     *
     * @param path    请求路径 pattern, 支持变量路径, 如果为 * 则匹配所有
     * @param handler 请求处理
     */
    void proxy(String path, Handler handler);

    /**
     * 全局前置拦截
     *
     * @param handler 拦截处理
     */
    void before(Handler handler);

    /**
     * 局部前置拦截, 匹配指定路径, 支持通配符的使用
     *
     * @param pattern 路径匹配规则, 支持通配符, 如: /users/**
     * @param handler 拦截处理
     * @see xyz.lwm.lazycat.utility.scan.PathRegex
     */
    void before(String pattern, Handler handler);

    /**
     * 全局后置拦截
     *
     * @param handler 拦截处理
     */
    void after(Handler handler);

    /**
     * 局部后置拦截, 匹配指定路径, 支持通配符的使用
     *
     * @param pattern 路径匹配规则, 支持通配符, 如: /users/**
     * @param handler 拦截处理
     * @see xyz.lwm.lazycat.utility.scan.PathRegex
     */
    void after(String pattern, Handler handler);

    /**
     * GET 请求
     *
     * @param path    请求路径, 支持变量路径, 如: /users/{id}
     * @param handler 请求处理
     */
    void get(String path, Handler handler);

    /**
     * POST 请求
     *
     * @param path    请求路径, 支持变量路径
     * @param handler 请求处理
     */
    void post(String path, Handler handler);

    /**
     * PUT 请求
     *
     * @param path    请求路径, 支持变量路径
     * @param handler 请求处理
     */
    void put(String path, Handler handler);

    /**
     * DELETE 请求
     *
     * @param path    请求路径, 支持变量路径
     * @param handler 请求处理
     */
    void delete(String path, Handler handler);

    /**
     * PATCH 请求
     *
     * @param path    请求路径, 支持变量路径
     * @param handler 请求处理
     */
    void patch(String path, Handler handler);

    /**
     * HEAD 请求
     *
     * @param path    请求路径, 支持变量路径
     * @param handler 请求处理
     */
    void head(String path, Handler handler);

}
